package easy;

import java.util.Arrays;

/**
 * Created by daodao on 2018/7/16.
 * Problem 66
 * Description: Given a non-empty array of digits representing a non-negative integer, plus one to the integer.
 * The digits are stored such that the most significant digit is at the head of the list, and each element in the array
 * contain a single digit.You may assume the integer does not contain any leading zero, except the number 0 itself.
 *
 * Example 1: Input: [1,2,3]
 *            Output: [1,2,4]
 * Explanation: The array represents the integer 123.
 * Example 2: Input: [4,3,2,1]
 *            Output: [4,3,2,2]
 * Explanation: The array represents the integer 4321.
 */
public class PlusOne {
    public static int[] plusOne(int[] digits) {
        int bits = digits.length;
        int[] result = new int[bits];
        boolean isCarried = true;
        for (int i = bits - 1; i >= 0; i--) {
            if (isCarried) {
                if (digits[i] + 1 > 9) {
                    isCarried = true;
                    result[i] = 0;
                } else {
                    isCarried = false;
                    result[i] = digits[i] + 1;
                }
            } else {
                result[i] = digits[i];
            }
        }
        if (isCarried) {
            int[] result2 = new int[bits + 1];
            result2[0] = 1;
            System.arraycopy(result, 0, result2, 1, result.length);
            return result2;
        }
        return result;
    }

    public static int[] plusOne2(int[] digits) {
        int n = digits.length;
        for(int i=n-1; i>=0; i--) {
            if(digits[i] < 9) {
                digits[i]++;
                return digits;
            }

            digits[i] = 0;
        }

        int[] newNumber = new int [n+1];
        newNumber[0] = 1;

        return newNumber;
    }
}
